const Koa = require('koa')
const app = new Koa() // 实例化 koa
const Router = require('koa-router')
const router = new Router() // 实例化 router
const users = require('./routes/api/user') // 引入user api文件
const upload = require('./routes/api/upload') // 引入图片管理 api文件
const introduction = require('./routes/api/introduction') // 引入简介AP管理
const mongoose = require('mongoose') // 引入mongoose 链接mongoDB组件
const dbURI = require('./config/keys').mongoURI // 定义链接数据库地址
const path = require('path')
const koaBody = require('koa-body')
const koaStatic = require('koa-static') // 借助 koa-static 中间件可以帮助我们生成一个静态服务，它指定一个文件夹，文件夹下所有的文件都可以通过 http服务来访问

app.use(koaStatic(path.join(__dirname, 'public'))) // 将public目录设置为公共目录，可以直接在浏览器中就能访问到
// 设置文件上传
app.use(koaBody({
  // 支持文件格式
  multipart: true,
  formidable: {
      // 上传目录
      uploadDir: path.join(__dirname, 'public/upload'),
      // 保留文件扩展名
      keepExtensions: true,
      maxFieldsSize: 5 * 1024 * 1024, // 文件上传大小
  }
}));

// 配置路由地址文件
router.use('/api/user',users) // 用户注册登录api
router.use('/api/upload',upload) // 用户注册登录api
router.use('/api/introduction',introduction) // 简介api

// 链接mongoDB应用
mongoose
  .connect(dbURI,{ useNewUrlParser: true, useCreateIndex: true, useUnifiedTopology: true }) 
  .then( ()=> {
    console.log("链接成功")
  })
  .catch(err => {
    console.log(err)
  })

// 配置请求消息头，本地跨域配置
app.use(async (ctx, next)=> {
  ctx.set('Access-Control-Allow-Origin', '*');
  ctx.set('Access-Control-Allow-Headers', 'Content-Type');
  ctx.set('Access-Control-Allow-Methods', 'POST');
  await next();
});

// 启动路由
app.use(router.routes()).use(router.allowedMethods())

// 创建服务器 浏览器请求时，注意端口，可能会被浏览器限制，还有设置跨域问题
const prot = 8980 || process.dev.Port
app.listen(prot,() => {
  console.log('端口已启动')
})